// WebSocket 消息发送服务

let wsInstance = null;

/**
 * 初始化 WebSocket 消息发送服务
 * @param {WebSocket} webSocket - 已连接的 WebSocket 实例
 */
export const initWebSocketMessenger = (webSocket) => {
  wsInstance = webSocket;
};

/**
 * 通用的消息发送函数
 * @param {string} type - 消息类型
 * @param {Object} data - 消息数据
 * @returns {boolean} 是否成功发送
 */
export const sendMessage = (type, data) => {
  try {
    // 检查 WebSocket 连接状态
    if (!wsInstance || wsInstance.readyState !== WebSocket.OPEN) {
      throw new Error('WebSocket 连接问题');
    }
    
    // 验证消息格式
    if (!type || typeof data !== 'object') {
      throw new Error('发送的数据不是对象');
    }
    
    // 构建完整消息
    const message = JSON.stringify({ type, data });
    
    // 发送消息
    wsInstance.send(message);
    
    // 调试信息（可选）
    console.log(`[WebSocket] Sent ${type} message:`, data);
    
    return true;
  } catch (error) {
    console.error('[WebSocket] Failed to send message:', error.message);
    // 这里可以添加全局错误处理逻辑，如通知用户或重试机制
    return false;
  }
};

/**
 * 发送游戏消息    
 * @param {Object} options - 消息选项
 * @param {string} options.roomId - 房间ID
 * @param {Object} options.player - 玩家信息
 * @param {string} options.player.id - 玩家ID
 * @param {string} options.player.name - 玩家名字
 * @param {number} options.player.sx - 玩家顺序
 * @param {string} options.messageType - 消息类型
 * @param {Object[]} [options.cards] - 牌信息（出牌时使用）
 * @param {number} [options.score] - 分数（叫地主时使用）
 * @param {string} [options.nextplayerid] - 下一个玩家
 * @returns {boolean} 是否成功发送
 */
export const sendGameMessage = ({
  roomId,
  player,
  messageType,
  bid=false,
  pai = [],
  score = 0,
  nextplayerid = ''
}) => {
  // 基础数据验证
  console.log(roomId)
  console.log(player)
  console.log(messageType)
  if (!roomId || !player || !messageType) {
    console.error('[WebSocket] 缺少roomid或player或messageType');
    return false;
  }
  
  // 准备数据
  let data;
  
  switch (messageType) {
    case 'playcard':
      data = {
        roomId,
        player: player.name,
        id: player.id,
        nextplayerid,
        pai,
        sx: player.sx
      };
      break;
      
    case 'calland':
      data = {
        roomId,
        playerId: player.id,
        bid,
        score,
        sx: player.sx,
        nextplayerid
      };
      break;
      
    case 'pass':
      data = {
        roomId,
        player: player.name,
        id: player.id,
        nextplayerid,
        pai: [],
        sx: player.sx
      };
      break;
      
    default:
      console.warn(`[WebSocket] Unsupported game message type: ${messageType}`);
      return false;
  }
  console.log("发送前")
  console.log(data)
  // 发送消息
  return sendMessage(messageType, data);
};